function FileListPlugin(options) {}
FileListPlugin.prototype.apply = function(compiler) {
    // compile（'编译器'对'开始编译'这个事件的监听）
    /*compiler.plugin('compile', function(params) {
       console.log('开始编译...');
    });*/
    // compilation（'编译器'对'编译ing'这个事件的监听）
    /*compiler.plugin('compilation', function(compilation) {
        console.log('编译ing...');
    });*/
    // 在compilation事件监听中，我们可以访问compilation引用，它是一个代表编译过程的对象引用
    // 我们一定要区分compiler和compilation，一个代表编译器实体，另一个代表编译过程
    compiler.plugin('compile', function(params) {
    });
    compiler.plugin('compilation', function(compilation) {
    });
    // emit（'编译器'对'生成最终资源'这个事件的监听）
    compiler.plugin('emit', function(compilation, callback) {
        // 在生成文件中，创建一个头部字符串：
        var filelist = 'In this build'+ (+new Date()) +':\n\n';
        console.log('FileListPlugin');
        // 检索每个（构建输出的）chunk：
        (compilation.chunks||[]).forEach(function(chunk) {
            // 检索 chunk 中（内置输入的）的每个模块：
            (chunk.modules||[]).forEach(function(module) {
                // 检索模块中包含的每个源文件路径：
                (module.fileDependencies||[]).forEach(function(filepath) {
                    // 我们现在已经对源结构有不少了解……
                    filelist += ('- '+ filepath +'\n');
                });
            });
            // 最终生成的文件的集合
            /*chunk.files.forEach(function(filename) {
                // source()可以得到每个文件的源码
                var source = compilation.assets[filename].source();
            });*/
        });
        // 将这个列表作为一个新的文件资源，插入到 webpack 构建中：
        compilation.assets['filelist.md'] = {
            source: function() {
                return filelist;
            },
            size: function() {
                return filelist.length;
            }
        };
        // callback在最后必须调用
        callback();
    });
};
module.exports = FileListPlugin;